{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "#1导包 导入数据集\n",
    "from sklearn.datasets import load_boston"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'data': array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,\n",
       "         4.9800e+00],\n",
       "        [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,\n",
       "         9.1400e+00],\n",
       "        [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,\n",
       "         4.0300e+00],\n",
       "        ...,\n",
       "        [6.0760e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n",
       "         5.6400e+00],\n",
       "        [1.0959e-01, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9345e+02,\n",
       "         6.4800e+00],\n",
       "        [4.7410e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n",
       "         7.8800e+00]]),\n",
       " 'target': array([24. , 21.6, 34.7, 33.4, 36.2, 28.7, 22.9, 27.1, 16.5, 18.9, 15. ,\n",
       "        18.9, 21.7, 20.4, 18.2, 19.9, 23.1, 17.5, 20.2, 18.2, 13.6, 19.6,\n",
       "        15.2, 14.5, 15.6, 13.9, 16.6, 14.8, 18.4, 21. , 12.7, 14.5, 13.2,\n",
       "        13.1, 13.5, 18.9, 20. , 21. , 24.7, 30.8, 34.9, 26.6, 25.3, 24.7,\n",
       "        21.2, 19.3, 20. , 16.6, 14.4, 19.4, 19.7, 20.5, 25. , 23.4, 18.9,\n",
       "        35.4, 24.7, 31.6, 23.3, 19.6, 18.7, 16. , 22.2, 25. , 33. , 23.5,\n",
       "        19.4, 22. , 17.4, 20.9, 24.2, 21.7, 22.8, 23.4, 24.1, 21.4, 20. ,\n",
       "        20.8, 21.2, 20.3, 28. , 23.9, 24.8, 22.9, 23.9, 26.6, 22.5, 22.2,\n",
       "        23.6, 28.7, 22.6, 22. , 22.9, 25. , 20.6, 28.4, 21.4, 38.7, 43.8,\n",
       "        33.2, 27.5, 26.5, 18.6, 19.3, 20.1, 19.5, 19.5, 20.4, 19.8, 19.4,\n",
       "        21.7, 22.8, 18.8, 18.7, 18.5, 18.3, 21.2, 19.2, 20.4, 19.3, 22. ,\n",
       "        20.3, 20.5, 17.3, 18.8, 21.4, 15.7, 16.2, 18. , 14.3, 19.2, 19.6,\n",
       "        23. , 18.4, 15.6, 18.1, 17.4, 17.1, 13.3, 17.8, 14. , 14.4, 13.4,\n",
       "        15.6, 11.8, 13.8, 15.6, 14.6, 17.8, 15.4, 21.5, 19.6, 15.3, 19.4,\n",
       "        17. , 15.6, 13.1, 41.3, 24.3, 23.3, 27. , 50. , 50. , 50. , 22.7,\n",
       "        25. , 50. , 23.8, 23.8, 22.3, 17.4, 19.1, 23.1, 23.6, 22.6, 29.4,\n",
       "        23.2, 24.6, 29.9, 37.2, 39.8, 36.2, 37.9, 32.5, 26.4, 29.6, 50. ,\n",
       "        32. , 29.8, 34.9, 37. , 30.5, 36.4, 31.1, 29.1, 50. , 33.3, 30.3,\n",
       "        34.6, 34.9, 32.9, 24.1, 42.3, 48.5, 50. , 22.6, 24.4, 22.5, 24.4,\n",
       "        20. , 21.7, 19.3, 22.4, 28.1, 23.7, 25. , 23.3, 28.7, 21.5, 23. ,\n",
       "        26.7, 21.7, 27.5, 30.1, 44.8, 50. , 37.6, 31.6, 46.7, 31.5, 24.3,\n",
       "        31.7, 41.7, 48.3, 29. , 24. , 25.1, 31.5, 23.7, 23.3, 22. , 20.1,\n",
       "        22.2, 23.7, 17.6, 18.5, 24.3, 20.5, 24.5, 26.2, 24.4, 24.8, 29.6,\n",
       "        42.8, 21.9, 20.9, 44. , 50. , 36. , 30.1, 33.8, 43.1, 48.8, 31. ,\n",
       "        36.5, 22.8, 30.7, 50. , 43.5, 20.7, 21.1, 25.2, 24.4, 35.2, 32.4,\n",
       "        32. , 33.2, 33.1, 29.1, 35.1, 45.4, 35.4, 46. , 50. , 32.2, 22. ,\n",
       "        20.1, 23.2, 22.3, 24.8, 28.5, 37.3, 27.9, 23.9, 21.7, 28.6, 27.1,\n",
       "        20.3, 22.5, 29. , 24.8, 22. , 26.4, 33.1, 36.1, 28.4, 33.4, 28.2,\n",
       "        22.8, 20.3, 16.1, 22.1, 19.4, 21.6, 23.8, 16.2, 17.8, 19.8, 23.1,\n",
       "        21. , 23.8, 23.1, 20.4, 18.5, 25. , 24.6, 23. , 22.2, 19.3, 22.6,\n",
       "        19.8, 17.1, 19.4, 22.2, 20.7, 21.1, 19.5, 18.5, 20.6, 19. , 18.7,\n",
       "        32.7, 16.5, 23.9, 31.2, 17.5, 17.2, 23.1, 24.5, 26.6, 22.9, 24.1,\n",
       "        18.6, 30.1, 18.2, 20.6, 17.8, 21.7, 22.7, 22.6, 25. , 19.9, 20.8,\n",
       "        16.8, 21.9, 27.5, 21.9, 23.1, 50. , 50. , 50. , 50. , 50. , 13.8,\n",
       "        13.8, 15. , 13.9, 13.3, 13.1, 10.2, 10.4, 10.9, 11.3, 12.3,  8.8,\n",
       "         7.2, 10.5,  7.4, 10.2, 11.5, 15.1, 23.2,  9.7, 13.8, 12.7, 13.1,\n",
       "        12.5,  8.5,  5. ,  6.3,  5.6,  7.2, 12.1,  8.3,  8.5,  5. , 11.9,\n",
       "        27.9, 17.2, 27.5, 15. , 17.2, 17.9, 16.3,  7. ,  7.2,  7.5, 10.4,\n",
       "         8.8,  8.4, 16.7, 14.2, 20.8, 13.4, 11.7,  8.3, 10.2, 10.9, 11. ,\n",
       "         9.5, 14.5, 14.1, 16.1, 14.3, 11.7, 13.4,  9.6,  8.7,  8.4, 12.8,\n",
       "        10.5, 17.1, 18.4, 15.4, 10.8, 11.8, 14.9, 12.6, 14.1, 13. , 13.4,\n",
       "        15.2, 16.1, 17.8, 14.9, 14.1, 12.7, 13.5, 14.9, 20. , 16.4, 17.7,\n",
       "        19.5, 20.2, 21.4, 19.9, 19. , 19.1, 19.1, 20.1, 19.9, 19.6, 23.2,\n",
       "        29.8, 13.8, 13.3, 16.7, 12. , 14.6, 21.4, 23. , 23.7, 25. , 21.8,\n",
       "        20.6, 21.2, 19.1, 20.6, 15.2,  7. ,  8.1, 13.6, 20.1, 21.8, 24.5,\n",
       "        23.1, 19.7, 18.3, 21.2, 17.5, 16.8, 22.4, 20.6, 23.9, 22. , 11.9]),\n",
       " 'feature_names': array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n",
       "        'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7'),\n",
       " 'DESCR': \".. _boston_dataset:\\n\\nBoston house prices dataset\\n---------------------------\\n\\n**Data Set Characteristics:**  \\n\\n    :Number of Instances: 506 \\n\\n    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.\\n\\n    :Attribute Information (in order):\\n        - CRIM     per capita crime rate by town\\n        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.\\n        - INDUS    proportion of non-retail business acres per town\\n        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\\n        - NOX      nitric oxides concentration (parts per 10 million)\\n        - RM       average number of rooms per dwelling\\n        - AGE      proportion of owner-occupied units built prior to 1940\\n        - DIS      weighted distances to five Boston employment centres\\n        - RAD      index of accessibility to radial highways\\n        - TAX      full-value property-tax rate per $10,000\\n        - PTRATIO  pupil-teacher ratio by town\\n        - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\\n        - LSTAT    % lower status of the population\\n        - MEDV     Median value of owner-occupied homes in $1000's\\n\\n    :Missing Attribute Values: None\\n\\n    :Creator: Harrison, D. and Rubinfeld, D.L.\\n\\nThis is a copy of UCI ML housing dataset.\\nhttps://archive.ics.uci.edu/ml/machine-learning-databases/housing/\\n\\n\\nThis dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\\n\\nThe Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\\nprices and the demand for clean air', J. Environ. Economics & Management,\\nvol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics\\n...', Wiley, 1980.   N.B. Various transformations are used in the table on\\npages 244-261 of the latter.\\n\\nThe Boston house-price data has been used in many machine learning papers that address regression\\nproblems.   \\n     \\n.. topic:: References\\n\\n   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\\n   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\\n\",\n",
       " 'filename': '/opt/conda/lib/python3.7/site-packages/sklearn/datasets/data/boston_house_prices.csv'}"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数据加载\n",
    "data=load_boston()\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(506, 13)\n",
      "(506,) <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "X=data['data']#这样就把特征提取出来了\n",
    "y=data['target']#这样就把目标target给提取出来了\n",
    "print(X.shape)\n",
    "print(y.shape,type(y))#13个特征  506行数据  这个是回归模型 target是一群值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(506, 1) <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "y=y.reshape(-1,1)#y这个时候还是一维的的ndarray   需要把他转换成一个列\n",
    "print(y.shape,type(y))#"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([506, 13])\n",
      "torch.Size([506, 1])\n"
     ]
    }
   ],
   "source": [
    "#数据规范化\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "ss=MinMaxScaler()\n",
    "X=ss.fit_transform(X)\n",
    "#把x、y从ndarray格式转成torch格式\n",
    "import torch\n",
    "X=torch.from_numpy(X).type(torch.FloatTensor)\n",
    "y=torch.from_numpy(y).type(torch.FloatTensor)\n",
    "print(X.shape)\n",
    "print(y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([404, 13])\n",
      "torch.Size([102, 13])\n",
      "torch.Size([404, 1])\n",
      "torch.Size([102, 1])\n"
     ]
    }
   ],
   "source": [
    "#切分数据集\n",
    "from sklearn.model_selection import train_test_split\n",
    "train_x,test_x,train_y,test_y=train_test_split(X,y,test_size=0.2)\n",
    "print(train_x.shape)\n",
    "print(test_x.shape)\n",
    "print(train_y.shape)\n",
    "print(test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第0次迭代的loss是:605.7279663085938\n",
      "第30次迭代的loss是:139.93576049804688\n",
      "第60次迭代的loss是:63.60810852050781\n",
      "第90次迭代的loss是:48.92672348022461\n",
      "第120次迭代的loss是:42.337562561035156\n",
      "第150次迭代的loss是:36.18453598022461\n",
      "第180次迭代的loss是:30.631855010986328\n",
      "第210次迭代的loss是:26.46531105041504\n",
      "第240次迭代的loss是:23.967947006225586\n",
      "第270次迭代的loss是:22.681331634521484\n",
      "第300次迭代的loss是:22.05855941772461\n"
     ]
    }
   ],
   "source": [
    "from torch import nn\n",
    "#构造网络\n",
    "model=nn.Sequential(\n",
    "                    nn.Linear(13,16),#13*16   因为之前的下面的输入train_x的维度是(404,13)\n",
    "                    nn.ReLU(),#这里是一层ReLU()层  输出的数据的维度(404,16)\n",
    "                    nn.Linear(16,1)#再加一层全连接层 就输出y了  维度是(404,1)\n",
    "                )\n",
    "#构造优化器和损失函数\n",
    "criterion=nn.MSELoss()\n",
    "optimizer=torch.optim.Adam(model.parameters(),lr=0.08)\n",
    "#训练\n",
    "max_epoch=301\n",
    "iter_loss=[]\n",
    "for i in range(max_epoch):\n",
    "    #前向传播\n",
    "    y_pred=model(train_x)#把train_x喂入\n",
    "    #计算loss\n",
    "    loss=criterion(y_pred,train_y)#计算预测值跟实际的误差\n",
    "    if(i%30==0): \n",
    "        print(\"第{}次迭代的loss是:{}\".format(i,loss))\n",
    "    iter_loss.append(loss.item())\n",
    "    #清空之前的梯度\n",
    "    optimizer.zero_grad()    \n",
    "    #反向传播\n",
    "    loss.backward()\n",
    "    #权重调整\n",
    "    optimizer.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[27.322037 ]\n",
      " [33.014297 ]\n",
      " [12.892808 ]\n",
      " [38.9264   ]\n",
      " [19.727175 ]\n",
      " [32.64284  ]\n",
      " [24.391222 ]\n",
      " [20.267149 ]\n",
      " [38.409996 ]\n",
      " [ 5.8044405]]\n"
     ]
    }
   ],
   "source": [
    "#测试\n",
    "output=model(test_x)#模型训练好了 再把测试集给喂入  然后就得到了测试集的输出值\n",
    "predict_list=output.detach().numpy()\n",
    "print(predict_list[:10])#只输出前10行吧"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAoQ0lEQVR4nO3de5xcdX3/8ddnZvZ+T7K7CdmEkBCFKBdpFPBKjaigNFgtUK0C5feL+rPViq3ipS22tMWfban8tFgqKiCCCOVSpQJyUbxwCbcAIUgIgSQk2c1lN5vsZm/z+f1xvjOZLLPX7OzMzryfj8c85pzvOTPnc2aSee/3XM3dERERAYjluwARESkcCgUREUlTKIiISJpCQURE0hQKIiKSplAQEZE0hYJMCTNbZGZuZokpeK9TzGzzVNR1qMys1cx+aWbdZvYvWaZ/28z+Oh+1ZdTwjJmdks8apHgoFGRSzGyjmb0r33VMg1XADqDe3T83fKK7f8Ld/x6mJ8zM7PtmdsmwGl7n7vfncrnDajjPzH41XcuT6aVQEBnd4cBan4azPKeilyVyyNxdDz0m9ACuBZJAL7AX+DywCHDgXOBlor+uv5zxmhhwEfACsBO4EZg1wvufAmzOGD8auB/oBJ4B/iBj2unAWqAb2AL8ZWifA/wkvGYX8AAQG2F5bwYeAbrC85tD+/eBAaA/rOe7srz2+8AlQE34PJJh3r3AYaOtd8ZndkH4zH4Z2n8MbAv1/BJ4XWhfNaye/w7tG1O1ARXAvwGvhMe/ARWZnyvwOaAd2AqcP8r3fB6wIXy2LwIfCd/FfmAo1NCZsdx/DuuxHfg2UDVsuV8K/y42Ah/J979jPUb43vNdgB4z85H5QxTGUz9w/wlUAccBfcDRYfpngAeBtvAD8h/A9SO89ymEUADKgPXhB6UceGf4kXptmL4VeFsYbgJOCMP/FH6YysLjbYBlWdYsYDfwUSAB/HEYnx2mfx+4ZJTPIT2dYWE21npnfGbXEIVK6kf0T4G6jB/4J7ItL9t3AfxdWF4L0Az8Bvj7jPoGwzxlRIHaAzRlWa8aYE/G5zyPA+F0HvCrYfNfBtwePs864L+Bfxq23H8N6/QOYF/qvfUorIc2H8lU+6q797r7k8CTROEA8AminsNmd+8DLgY+NI5NJicBtcCl7t7v7vcS9QD+OEwfAJaZWb2773b3xzLa5wGHu/uAuz/g4RdqmPcBz7v7te4+6O7XA+uAMya19q82nvW+2N33uXsvgLt/1927M+Y/zswaxrm8jwB/5+7t7t4BfJUo8FIGwvQBd7+D6K/9147wXkng9WZW5e5b3f2ZbDOZmRH1Yj7r7rvcvRv4R+CcYbP+tbv3ufsvgJ8CZ41znWQaKRRkqm3LGO4h+kGHaNv8LWbWaWadwLNEmyBax3i/w4BN7p7MaHsJmB+GP0j0F+9LZvYLMzs5tH+dqIdxl5ltMLOLRnn/l4a1Zb7/oRrPem9KDZhZ3MwuNbMXzGwPUS8Aos1h4zF8fV4KbSk73X0wYzzzO0pz933A2UShttXMfmpmR42wzGagGng0Yz1/FtpTdof3HKkuKRAKBZmsie543QSc5u6NGY9Kd98yxuteARaYWea/1YVE+w9w90fcfSXR5pJbibbZE/7S/py7Lwb+ALjQzFaM8P6HD2tLv/8EZftMxrPema/7MLASeBfQQLSJCcBGWUam4euzMLRNmLvf6e6nEvW41hFtGsxWww6i/Smvy1jHBnfPDJsmM6uZiroktxQKMlnbgcUTmP/bwD+Y2eEAZtZsZivH8bqHiP6a/byZlYXj8c8AbjCzcjP7iJk1uPsA0TbwZHj/95vZkWHTRhfRX+fJLO9/B/AaM/uwmSXM7GxgGdEmqonaDswetqlnoutdR7QvZifRX9//mGUZo33u1wNfCcuZA/wN8IOJrUb6/IyV4Ye8j2gzU+rz2w60mVk5QOjF/SdwmZm1hNfPN7P3DHvbr4bv7G3A+4l2qEuBUSjIZP0T0Y9Pp5n95Tjm/wbRjsi7zKybaGfoiWO9yN37iULgNKK/SP8d+Ji7rwuzfBTYGDa1fIJomzrAUuDnRD9mvwX+3d3vy/L+O4l+oD5H9EP8eeD97r5jHOs0/L3WEf0obwify2GTWO9riDatbCE6qurBYdOvItqH0mlmt2Z5/SXAamAN8BTwWGibqBhwIdFf87uIdg5/Mky7l+gosG1mlvqcvkC0ue7B8F38nIP3VWwj2oH/CnAd8ImM71AKiGXf9yYiMjVC7+4H7t6W51JkHNRTEBGRNIWCiIikafORiIikqacgIiJpM/oCXHPmzPFFixbluwwRkRnl0Ucf3eHuzdmmzehQWLRoEatXr853GSIiM4qZDT+LP02bj0REJE2hICIiaQoFERFJUyiIiEiaQkFERNIUCiIikqZQEBGRtJyGgpk1mtlNZrbOzJ41s5PNbJaZ3W1mz4fnpjCvmdnlZrbezNaY2Qm5qmv1xl187Wfr0CU+REQOluuewjeAn7n7UUT36n0WuAi4x92XAveEcYiul780PFYBV+SqqKe2dHHF/S+wc19/rhYhIjIj5SwUwt2n3k50UxDCTdc7iW41eHWY7WrgzDC8ErjGIw8CjWY2Lxe1LZoT3RXwxR37xphTRKS05LKncATQAXzPzB43s++EW/u1uvvWMM82DtzAfD4ZNzAHNpPl5ulmtsrMVpvZ6o6OjkkVtlihICKSVS5DIQGcAFzh7m8A9nFgUxEAHm3Un9CGfXe/0t2Xu/vy5uas13Ma0/zGKsriplAQERkml6GwGdjs7g+F8ZuIQmJ7arNQeG4P07cACzJe3xbaplwiHmPBrGpe7FAoiIhkylkouPs2YJOZpW7evYLoRuS3A+eGtnOB28Lw7cDHwlFIJwFdGZuZptziOTVs3KlQEBHJlOtLZ/85cJ2ZlQMbgPOJguhGM7sAeAk4K8x7B3A6sB7oCfPmzBFzanjg+R0kk04sZrlclIjIjJHTUHD3J4DlWSatyDKvA5/KZT2ZXtNaR99gkvUde3lNa910LVZEpKCV7BnNJy2eDcCDG3bmuRIRkcJRsqHQ1lTF/MYqfvuCQkFEJKVkQ8HMOGnxbB7csJNkUpe7EBGBEg4FgBOPmMXungE27Nib71JERApCSYfC8QsbAXhyU1d+CxERKRAlHQpLmmupKY/zxKbOfJciIlIQSjoU4jHj2LZGntzcme9SREQKQkmHAsBxCxp5duse9g8M5bsUEZG8K/lQOGZ+AwNDzvp27WwWESn5UHjt3Ohs5nXbuvNciYhI/pV8KCyaXU1FIsZz2/bkuxQRkbwr+VBIxGMsba1VT0FEBIUCAEfNrVcoiIigUADgqLl1dHT3sWtff75LERHJK4UCsKSlFoAXOnQEkoiUNoUCcGRzFAobFAoiUuIUCsBhjVWUJ2K8oHs2i0iJUygQXe7iiNk16imISMlTKARLWmrYoJ6CiJQ4hUKweE4tL+3qoX8wme9SRETyRqEQHDGnhqGks3l3T75LERHJG4VCsGBWNQCbdvfmuRIRkfxRKAQLZlUB8PIu9RREpHQpFILWukrK4zE2KxREpIQpFIJYzJjfVMUm7VMQkRKW01Aws41m9pSZPWFmq0PbLDO728yeD89Nod3M7HIzW29ma8zshFzWlk1bUxWbdmmfgoiUrunoKfy+ux/v7svD+EXAPe6+FLgnjAOcBiwNj1XAFdNQ20EWzKpWT0FESlo+Nh+tBK4Ow1cDZ2a0X+ORB4FGM5s3nYUtaKqms2eA7v0D07lYEZGCketQcOAuM3vUzFaFtlZ33xqGtwGtYXg+sCnjtZtD20HMbJWZrTaz1R0dHVNabOoIJG1CEpFSletQeKu7n0C0aehTZvb2zInu7kTBMW7ufqW7L3f35c3NzVNYatRTALQJSURKVk5Dwd23hOd24BbgTcD21Gah8NweZt8CLMh4eVtomzbpE9h0WKqIlKichYKZ1ZhZXWoYeDfwNHA7cG6Y7VzgtjB8O/CxcBTSSUBXxmamadFUXUZNeZzNOqtZREpUIofv3QrcYmap5fzQ3X9mZo8AN5rZBcBLwFlh/juA04H1QA9wfg5ry8rMoiOQ1FMQkRKVs1Bw9w3AcVnadwIrsrQ78Klc1TNebU3VvLxLl9AWkdKkM5qHWTArOoEtyigRkdKiUBhmQVM1vQND7NzXn+9SRESmnUJhmLam6FyFVzq1s1lESo9CYZh5DVEobO3an+dKRESmn0JhmLkNlQBsUyiISAlSKAwzu6acsrippyAiJUmhMEwsZrTWV7KtS/sURKT0KBSymNdQqZ6CiJQkhUIWcxuq2L5HoSAipUehkEWqp6AT2ESk1CgUsphbX0nfYJLOHt1sR0RKi0Ihi3nhsFTtVxCRUqNQyCJ9rsIeHYEkIqVFoZCFzmoWkVKlUMiiua6CeMx0VrOIlByFQhbxmNFSV6GegoiUHIXCCOY2VKqnICIlR6EwguhcBe1oFpHSolAYQWu9TmATkdKjUBjBvIZKevqH6O4bzHcpIiLTRqEwgrnhsFTtVxCRUqJQGEFLXQUA7Xv68lyJiMj0USiMIB0K3eopiEjpUCiMoKU+utRFe7d6CiJSOhQKI6itSFBdHtfmIxEpKTkPBTOLm9njZvaTMH6EmT1kZuvN7EdmVh7aK8L4+jB9Ua5rG0tLXYU2H4lISZmOnsJngGczxr8GXObuRwK7gQtC+wXA7tB+WZgvr1rqKrX5SERKSk5DwczagPcB3wnjBrwTuCnMcjVwZhheGcYJ01eE+fOmub6CDoWCiJSQXPcU/g34PJAM47OBTndPnRG2GZgfhucDmwDC9K4w/0HMbJWZrTaz1R0dHTksPdp8pFAQkVKSs1Aws/cD7e7+6FS+r7tf6e7L3X15c3PzVL71q7TUVbK3b5Cefp3VLCKlIZc9hbcAf2BmG4EbiDYbfQNoNLNEmKcN2BKGtwALAML0BmBnDusbk05gE5FSk7NQcPcvunubuy8CzgHudfePAPcBHwqznQvcFoZvD+OE6fd6nq9G11KfOoFNoSAipSEf5yl8AbjQzNYT7TO4KrRfBcwO7RcCF+WhtoM066xmESkxibFnOXTufj9wfxjeALwpyzz7gT+ajnrGq6UunNWszUciUiJ0RvMomqrLKIubNh+JSMlQKIzCzGiu1VnNIlI6FApjaK6v1LkKIlIyFApjaKmr0D4FESkZCoUxtNRV0LFXoSAipUGhMIaWukp27eunfzA59swiIjOcQmEMqRPYdqi3ICIlQKEwhgO35VQoiEjxUyiM4cAJbDosVUSKn0JhDM3qKYhICVEojGFObTlmCgURKQ0KhTEk4jFm15TTobOaRaQEKBTGobmuUiewiUhJUCiMQ0tdhTYfiUhJUCiMg+7VLCKlQqEwDi31FezY20cymdcbwYmI5JxCYRxa6ioZTDq7evrzXYqISE6NKxTM7DNmVm+Rq8zsMTN7d66LKxTps5q1s1lEitx4ewp/6u57gHcDTcBHgUtzVlWBSV3/SDfbEZFiN95QsPB8OnCtuz+T0Vb00pe60M5mESly4w2FR83sLqJQuNPM6oCSuZZ0+lIXuv6RiBS5xDjnuwA4Htjg7j1mNgs4P2dVFZjKsjj1lQn1FESk6I23p3Ay8Jy7d5rZnwBfAbpyV1bhaanXWc0iUvzGGwpXAD1mdhzwOeAF4JqcVVWAWusrtKNZRIreeENh0N0dWAl8092/BdTlrqzC01JXqc1HIlL0xhsK3Wb2RaJDUX9qZjGgbLQXmFmlmT1sZk+a2TNm9tXQfoSZPWRm683sR2ZWHtorwvj6MH3RIazXlEtd/yjKRhGR4jTeUDgb6CM6X2Eb0AZ8fYzX9AHvdPfjiHZSv9fMTgK+Blzm7kcCu4l2YhOed4f2y8J8BaO5roL+wSRdvQP5LkVEJGfGFQohCK4DGszs/cB+dx91n4JH9obRsvBw4J3ATaH9auDMMLwyjBOmrzCzgjkXoqVe5yqISPEb72UuzgIeBv4IOAt4yMw+NI7Xxc3sCaAduJtoB3Wnuw+GWTYD88PwfGATQJjeBczO8p6rzGy1ma3u6OgYT/lTQpe6EJFSMN7zFL4MvNHd2wHMrBn4OQf+4s/K3YeA482sEbgFOGrypabf80rgSoDly5dP2wb+1nRPQUcgiUjxGu8+hVgqEIKdE3gt7t4J3Ed0vkOjmaXCqA3YEoa3AAsAwvSGsJyCkO4paPORiBSx8f6w/8zM7jSz88zsPOCnwB2jvcDMmkMPATOrAk4FniUKh9Smp3OB28Lw7WGcMP1eL6BDfWoqEtSUx7X5SESK2rg2H7n7X5nZB4G3hKYr3f2WMV42D7jazOJE4XOju//EzNYCN5jZJcDjwFVh/quAa81sPbALOGeC65JzLfWVbNfmIxEpYuPdp4C73wzcPIH51wBvyNK+AXhTlvb9RDuyC1ZzXQUd6imISBEbNRTMrJvoMNJXTSI66rQ+J1UVqJa6Cp7eUlKXfBKREjNqKLh7SV3KYizRpS7ax55RRGSG0j2aJ6C1voKe/iH29g2OPbOIyAykUJiA9G05dbMdESlSCoUJSN2Wc7t2NotIkVIoTMCBE9jUUxCR4qRQmIBUT6FDZzWLSJFSKExAfVWC8kRMl7oQkaKlUJgAM4tuy6kdzSJSpBQKE6TbcopIMVMoTFBLXQXb1VMQkSKlUJig1L2aRUSKkUJhglrqK+neP8j+gaF8lyIiMuUUChPUrNtyikgRUyhMUOq2nLqvgogUI4XCBM0NobCtS6EgIsVHoTBBcxsUCiJSvBQKE1RfGd2r+ZWu3nyXIiIy5RQKE2RmzG2oVE9BRIqSQmESDmus4hWFgogUIYXCJMxrqGSbNh+JSBFSKEzC3IYq2rv7GBhK5rsUEZEppVCYhMMaKnFHl7sQkaKjUJiE1GGpWzu1CUlEikvOQsHMFpjZfWa21syeMbPPhPZZZna3mT0fnptCu5nZ5Wa23szWmNkJuartULU1VQGwRaEgIkUmlz2FQeBz7r4MOAn4lJktAy4C7nH3pcA9YRzgNGBpeKwCrshhbYdkfmM1AJt3KxREpLjkLBTcfau7PxaGu4FngfnASuDqMNvVwJlheCVwjUceBBrNbF6u6jsUVeVx5tSWs2lXT75LERGZUtOyT8HMFgFvAB4CWt19a5i0DWgNw/OBTRkv2xzaClJbU7V6CiJSdHIeCmZWC9wM/IW778mc5u4O+ATfb5WZrTaz1R0dHVNY6cS0NVWxabd6CiJSXHIaCmZWRhQI17n7f4Xm7anNQuG5PbRvARZkvLwttB3E3a909+Xuvry5uTl3xY+hramaVzp7GUpOKNNERApaLo8+MuAq4Fl3/9eMSbcD54bhc4HbMto/Fo5COgnoytjMVHAWzKpiYMh1v2YRKSqJHL73W4CPAk+Z2ROh7UvApcCNZnYB8BJwVph2B3A6sB7oAc7PYW2HrK0pOgJp064eDmusynM1IiJTI2eh4O6/AmyEySuyzO/Ap3JVz1Q7fFYUCi/t7OHExbPzXI2IyNTQGc2T1NZURVnceGHH3nyXIiIyZRQKk5SIxzh8dg0bOvbluxQRkSmjUDgES5pr2NChnoKIFA+FwiFY3FzLy7t6GNQltEWkSCgUDsHiOTUMDDmbdGaziBQJhcIhWNJSC8D6dm1CEpHioFA4BK9trSNm8PSWrnyXIiIyJRQKh6CmIsGS5lqFgogUDYXCITqmrYGnFAoiUiQUCofomPkNtHf3jXgNpI079nHfuna69w9Mc2UiIhOXy2sflYRj2xoAePzlTt77+rkHTbtx9Sa+cPMa3OGIOTV877w3smhOTT7KFBEZF/UUDtEx8xupq0hw37r2g9offnEXX7h5DW89cg7f/pMT2LWvnwtvfIKkLrUtIgVMPYVDVJ6I8Y7XNnPPuu0kk04sZvT2D/H5m56kramK//jo71FdnqCnf4gLb3ySHz+6ibPfuDDfZYuIZKWewhQ4dVkrO/b288jGXQBc9vPfsXFnD1/7w2OpLo9y9wNvmM9xbQ1ccf8LujGPiBQshcIUWHF0K3NqK/iHO57lx6s38Z0HNvDhExfy5iPnpOcxMz7+jiVs3NnDXc9sy2O1IiIjUyhMgdqKBH97xjLWbO7ir25aw/LDZ/GV9x39qvne87q5LJhVxTW/fSkPVYqIjE37FKbIGccdRmt9Jdv37GfF0S3pzUaZ4jHjnDcu5Ot3PscLHXtZ0lybh0pFREamnsIUetMRszjjuMOyBkLKWcsXkIgZ1z/08jRWJiIyPgqFadZcV8F7XjeXmx7bzP6BoXyXIyJyEIVCHnzkxIV09gzwP09vzXcpIiIHUSjkwclLZnPEnBque1CbkESksCgU8sDM+PCbFrL6pd08t6073+WIiKQpFPLkg7/XRnkixvd/82K+SxERSVMo5MmsmnL+6PfauPnRLWzryn6FVRGR6aZQyKNPvGMJQ+58877n812KiAiQw1Aws++aWbuZPZ3RNsvM7jaz58NzU2g3M7vczNab2RozOyFXdRWSBbOq+ZMTF/LDh17mmVd0ox4Ryb9c9hS+D7x3WNtFwD3uvhS4J4wDnAYsDY9VwBU5rKugXHjqa2mqLufCHz1Jb7/OWxCR/MpZKLj7L4Fdw5pXAleH4auBMzPar/HIg0Cjmc3LVW2FpKG6jMvOPp7ftXfzqR8+phPaRCSvpnufQqu7p87Y2ga0huH5wKaM+TaHtpLw9tc0c8mZr+e+59o581u/5oHnO3QzHhHJi7xdEM/d3cwm/MtnZquINjGxcGHx3KzmIyceztz6Sr50y1N89KqHWTirmg+8YT7vO3Yer2mty3d5IlIiprunsD21WSg8p+5huQVYkDFfW2h7FXe/0t2Xu/vy5ubmnBY73VYc3cov/ur3+cY5x3NYYyWX3/s8777sl6z85q+485lt6j2ISM5NdyjcDpwbhs8Fbsto/1g4CukkoCtjM1NJqSyLs/L4+dyw6mQe+uIKLj5jGbt7Bvj4tY/yh1f8hvXte/NdoogUMXPPzV+fZnY9cAowB9gO/C1wK3AjsBB4CTjL3XeZmQHfJDpaqQc4391Xj7WM5cuX++rVY8424w0OJbn1iVe45Kdr6e0f4qLTjuK8Ny8i+thERCbGzB519+VZp+UqFKZDqYRCSnv3fr5481Pcs66d9x0zj0s/eAx1lWX5LktEZpjRQkFnNM8gLXWVfOfc5XzxtKP42TPbWPnNX+uCeiIypRQKM4yZ8fF3LOGH/+tEuvsGOfNbv+aWxzfnuywRKRIKhRnqxMWz+emn38pxCxr47I+e5Eu3PKUT30TkkCkUZrCWukp+cMGJfPKUJfzwoZd5//+LDl2dyfuJRCS/FAozXCIe4wvvPYrvnf9Gku58/NpHOe0bD/C9X7/Izr19+S5PRGYYHX1URAaHkvzX41u45rcbeXrLHmIGyxfN4t3LWnnX0a0smlOT7xJFpADokNQS9OzWPdzx1FbuXruddeEIpaUttZy6rJVTl7VyXFsjsZjOcxApRQqFErdpVw93r93O3Wu38/DGXQwlnea6Ct51dAunLmvlzUvmUFkWz3eZIjJNFAqS1tnTz/3PdXD32u3c/1w7+/qHqC6P87alc/j917bw+vkNHNlSq5AQKWIKBcmqb3CIBzfs4u612/j52na27YnuFR2PGYfPrmbhrGramqpoa6pmQVM0vGBWNU3VZbrEhsgMplCQMbk7G3bsY93WbtZt28Pz2/eyubOHTbt66eodOGjeqrI4rfUVtNRV0lxXQXNdBS1hvKm6jMbqMhqry2msKqOhqoxEXAe5iRSS0UIhb/dTkMJiZixprmVJcy3vO/bgm97t2T/A5l29bN7dw+bdvWze3Ut7937au/tYu3UPHb/rY2/f4IjvXVeRoLGmjMaq8oMCo7E6Co2m6lR7GQ1V5TRVK0xE8kWhIGOqryxj2WFlLDusfsR59vUNsmNvH7t7Bujs6aerd4DOngF29/TT2TMQxvvZ3TPA5t296XlGu0VEXUWChuoDodEQgqSpujwMR+HSVBOFSWqeMoWJyKQpFGRK1FQkqKlIcPjs8b8mmXS69w/S2RsFR2cIjs6egTCeGu6ns3eALbt72T2BMGmszuydZO+ppMYVJiIRhYLkTSxmNFSX0VBdNvEw6RukK9UT6T3QO9m9LwqTrhAyu3v6eaWzNz3PaGFSW5GINmeFTV0N1WVRT+Sgnkp5er9JqneiMJFiolCQGScWMxrCTuyFs6vH/brMMEn1QnZnbOrK7JV09vTzSldvum20MKkuj1NfWUZ9VYL6yqiu+qoy6isT4TnVlgjzhfHKMmorE8R1EqEUEIWClIyDwoSJhcne/oyeSeiFdIV9JHt6B9izf4A9vYPs2T/A9u79/K69Oz0+1gF+dRUhPIYFSX1VIh0eqWnpwAnjNeUJnZkuU0qhIDKGWMyiH+bKMhbMGn+YQBQo+/oH6eo9EBp7eqMd73v2D6YDJXP6pl09oX1w1KO6AMygpjxBbUWCmoo4tZVl1FbEw3iCuvBcWxnNM1p7dXlc55+IQkEkl2Ixo66yLLptatPEXz84lGRvX/ZQ6eodYF/fIN19g+zriwJkb98Qe/cPsKO7P4xHj6HRtn8FqYCpLItTXR6nqixOZXmc6rI4VWF8zOfw2sryOOXxGBWJGBWJOOWJaLg8PBIxUwAVKIWCSAFLxGPR0VLV5ZN+D3enbzBJ9/7M8Bhk7/5B9vUPHtS+r2+I3oEhevsHo+eBJL39g7R3D9DbPxQ9BqLH/oHkpGuKGVFAxGNUlB0IkMzwSIVJNE+MRCxGWdxIxI1ELAqWRDy0xWKh/dVtZXEjHotRFqYl4kZZxvxmRjxmxAxi6WEjHovGU21m0dn+cTvwmrgZFoN4mC920PDMDD2FgkiRMzMqy+JUlsVprquYsvdNJp39g1FQ9PQPsT+ERU8Ijv7BJP2DSfrSz8Pahg609w2bt38wSU//IJ29B9oHh5yBoSSDSWcw/ewMJJNj7rfJl8ywiR7RMOHZ0tMAomfLmB8gFgPj1a/9zIqlnHHcYVNes0JBRCYlFjOqyxNUlyeYwBHFOTGUjAJjKCMoMkNkKJlkYOjgaYNDSYbcGUo67tF7DLnj7gwlyRh2kh6F4JA7SfdoONUe2oaSHJgWnpNOxnC0nNRrgIw2D0e4OckkOAfem/DscFBbQ1VZTj5LhYKIzHjxmBGP6cq+U0Fn3YiISJpCQURE0goqFMzsvWb2nJmtN7OL8l2PiEipKZhQMLM48C3gNGAZ8Mdmtiy/VYmIlJaCCQXgTcB6d9/g7v3ADcDKPNckIlJSCikU5gObMsY3h7aDmNkqM1ttZqs7OjqmrTgRkVJQSKEwLu5+pbsvd/flzc3N+S5HRKSoFFIobAEWZIy3hTYREZkm5gVyfriZJYDfASuIwuAR4MPu/swor+kAXprkIucAOyb52kKjdSk8xbIeoHUpVIeyLoe7e9ZNLQVzRrO7D5rZnwF3AnHgu6MFQnjNpLcfmdlqd18+2dcXEq1L4SmW9QCtS6HK1boUTCgAuPsdwB35rkNEpFQV0j4FERHJs1IOhSvzXcAU0roUnmJZD9C6FKqcrEvB7GgWEZH8K+WegoiIDKNQEBGRtJIMhZl+NVYz22hmT5nZE2a2OrTNMrO7zez58DyJ28Tnlpl918zazezpjLasdVvk8vAdrTGzE/JX+auNsC4Xm9mW8L08YWanZ0z7YliX58zsPfmpOjszW2Bm95nZWjN7xsw+E9pn1HczynrMuO/FzCrN7GEzezKsy1dD+xFm9lCo+UdmVh7aK8L4+jB90aQX7uGWc6XyIDoH4gVgMVAOPAksy3ddE1yHjcCcYW3/F7goDF8EfC3fdWap++3ACcDTY9UNnA78D2DAScBD+a5/HOtyMfCXWeZdFv6dVQBHhH9/8XyvQ0Z984ATwnAd0Umky2badzPKesy47yV8trVhuAx4KHzWNwLnhPZvA58Mw/8H+HYYPgf40WSXXYo9hWK9GutK4OowfDVwZv5Kyc7dfwnsGtY8Ut0rgWs88iDQaGbzpqXQcRhhXUayErjB3fvc/UVgPdG/w4Lg7lvd/bEw3A08S3Qxyhn13YyyHiMp2O8lfLZ7w2hZeDjwTuCm0D78O0l9VzcBK8zMJrPsUgyFcV2NtcA5cJeZPWpmq0Jbq7tvDcPbgNb8lDZhI9U9U7+nPwubVL6bsQlvxqxL2OzwBqK/TGfsdzNsPWAGfi9mFjezJ4B24G6inkynuw+GWTLrTa9LmN4FzJ7McksxFIrBW939BKIbEn3KzN6eOdGjPuSMO9Z4ptad4QpgCXA8sBX4l7xWM0FmVgvcDPyFu+/JnDaTvpss6zEjvxd3H3L344kuDvom4KjpWG4phsKMvxqru28Jz+3ALUT/YLanuvDhuT1/FU7ISHXPuO/J3beH/8hJ4D85sCmi4NfFzMqIfkivc/f/Cs0z7rvJth4z+XsBcPdO4D7gZKJNdanLE2XWm16XML0B2DmZ5ZViKDwCLA178cuJdsrcnueaxs3MasysLjUMvBt4mmgdzg2znQvclp8KJ2ykum8HPhaOdDkJ6MrYlFGQhm1X/wDR9wLRupwTjhA5AlgKPDzd9Y0kbHu+CnjW3f81Y9KM+m5GWo+Z+L2YWbOZNYbhKuBUon0k9wEfCrMN/05S39WHgHtD727i8r2XPR8PoqMnfke0je7L+a5ngrUvJjpi4kngmVT9RNsP7wGeB34OzMp3rVlqv56o+z5AtD30gpHqJjr64lvhO3oKWJ7v+sexLteGWteE/6TzMub/cliX54DT8l3/sHV5K9GmoTXAE+Fx+kz7bkZZjxn3vQDHAo+Hmp8G/ia0LyYKrvXAj4GK0F4ZxteH6Ysnu2xd5kJERNJKcfORiIiMQKEgIiJpCgUREUlTKIiISJpCQURE0hQKUpTM7DfheZGZfXiK3/tL2ZaVC2Z2ipm9OVfvLzKcQkGKkrunfkgXARMKhYwzRkdyUChkLCsXTgEUCjJtFApSlMwsdYXJS4G3hevofzZcZOzrZvZIuEDax8P8p5jZA2Z2O7A2tN0aLjr4TOrCg2Z2KVAV3u+6zGWFM3y/bmZPW3S/i7Mz3vt+M7vJzNaZ2XXZrmBpZp+26F4Aa8zshnBRt08Anw3Le1s40/XmUP8jZvaW8NqLzexaM/utRfc/+N85/HilmOX7zD099MjFA9gbnk8BfpLRvgr4ShiuAFYTXUv/FGAfcETGvKkzeKuIziqdnfneWZb1QaKrWcaJrij6MtE1/k8humplG9EfYr8luqjh8Jpf4cAZqo3h+WIy7gUA/DD1WmAh0SUdUvM9GWqdQ3TFzMPy/T3oMfMeY3WTRYrNu4FjzSx1/ZgGomve9AMPe3Rd/ZRPm9kHwvCCMN9oFxl7K3C9uw8RXUzuF8AbgT3hvTcDhMshLwJ+Nez1a4DrzOxW4NYRlvEuYFlGR6M+XBUU4DZ37wV6zew+ogu/jfQ+IlkpFKTUGPDn7n7nQY1mpxD1FDLH3wWc7O49ZnY/0fVlJqsvY3iI7P/33kd0R7czgC+b2TFZ5okBJ7n7/szGEBLDr1mja9jIhGmfghS7bqJbM6bcCXwyXGIZM3tNuNrscA3A7hAIRxHdCjFlIPX6YR4Azg77LZqJfuDHddVNM4sBC9z9PuALYfm1Weq/C/jzjNcdnzFtpUX39p1NtMnqkfEsWySTQkGK3RpgyKIboH8W+A7RjuTHzOxp4D/I/lf7z4CEmT1LtLP6wYxpVwJrUjuaM9wSlvckcC/weXffNs4648APzOwpoqtjXu7RdfT/G/hAakcz8GlgedgZvZZoR3Tmut4Xav17d39lnMsWSdNVUkWKgJldTLTD+5/zXYvMbOopiIhImnoKIiKSpp6CiIikKRRERCRNoSAiImkKBRERSVMoiIhI2v8HjlCiBAKc0gsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制不同的 iteration 的loss\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "x=np.arange(max_epoch)\n",
    "y=np.array(iter_loss)\n",
    "plt.figure()\n",
    "plt.plot(x,y)\n",
    "plt.title(\"the loss of iteration step\")\n",
    "plt.xlabel(\"iteration step\")\n",
    "plt.ylabel(\"loss\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#查看真实值与预测值的散点图\n",
    "x=np.arange(test_x.shape[0])\n",
    "y1=np.array(predict_list)#测试集的预测值\n",
    "y2=np.array(test_y)#测试集的实际值\n",
    "line1=plt.scatter(x,y1,c=\"black\")\n",
    "line2=plt.scatter(x,y2,c='red')\n",
    "plt.legend([line1,line2],[\"y_Predict\",\"y_True\"])\n",
    "plt.title(\"the loss between y_True and y_Predict\")\n",
    "plt.ylabel(\"the price of Boston\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
